// 题目描述：
// 给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使得出现次数超过两次的元素只出现两次 ，返回删除后数组的新长度。

// 不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

// 示例 1：
// 输入：nums = [1,1,1,2,2,3]
// 输出：5, nums = [1,1,2,2,3]
// 解释：函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。

// 示例 2：
// 输入：nums = [0,0,1,1,1,1,2,3,3]
// 输出：7, nums = [0,0,1,1,2,3,3]
// 解释：函数应返回新长度 length = 7, 并且原数组的前七个元素被修改为 0, 0, 1, 1, 2, 3, 3。不需要考虑数组中超出新长度后面的元素。

// 自己的答案：
/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    let i = nums.length
    while (i--) {
        if (nums[i] === nums[i-1] && nums[i-1] === nums[i-2]) {
            nums.splice(i, 1);
        }
    }
    // let iArr = []
    // let n = 0
    // nums.forEach((e, i) => {
    //     if (e ===  nums[i+1] && nums[i+1] === nums[i+2]) {
    //         iArr.push(i)
    //     }
    // })
    // iArr.forEach(e => { // 按索引删除对应内容
    //     nums.splice(e - n, 1)
    //     ++n
    // })
};

// 官方答案：
var removeDuplicates = function(nums) {
    const n = nums.length;
    if (n <= 2) {
        return n;
    }
    let slow = 2, fast = 2;
    while (fast < n) {
        if (nums[slow - 2] != nums[fast]) {
            nums[slow] = nums[fast];
            ++slow;
        }
        ++fast;
    }
    return slow;
};

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function (nums) {
    for (var i = 2; i < nums.length; i++) {
        if (nums[i] === nums[i - 2]) {
            nums.splice(i,1)
            i--
        } 
    }
    return nums.length
};